package com.bdqn.t382.reflection;

import java.lang.reflect.Modifier;

public class GetClassInfo {
    public static void main(String[] args) {
        Class clz = Person.class;
        String fullName = clz.getName();
        String simpleName = clz.getSimpleName();
        System.out.println(clz);//获取Person的Class实例
        System.out.println(fullName);//类的完全限定名
        System.out.println(simpleName);//类名
        System.out.println("============================");
        Package pkg = clz.getPackage();
        System.out.println(simpleName + "定义在：" + pkg.getName() + " 包中");
        System.out.println("============================");
        Class superclass = clz.getSuperclass();//父类
        System.out.println(simpleName + "类的父类是" + superclass.getName());
        System.out.println("============================");
        Class[] interfaces = clz.getInterfaces();//实现的接口
        for (Class anInterface : interfaces) {
            System.out.println("\t" + anInterface.getName());
        }
        System.out.println("============================");
        int modifier = clz.getModifiers();//获取访问修饰符
        System.out.println(modifier);
        System.out.println(simpleName + " 类的修饰符：");
        //这里的 modifier & Modifier.PUBLIC 会将 modifier 的每一位与 Modifier.PUBLIC 的每一位进行按位与运算。
        // 如果 modifier 中包含 public 修饰符，那么结果会等于 Modifier.PUBLIC，否则结果为 0。
        // 通过比较结果是否等于 Modifier.PUBLIC，可以判断类是否具有 public 修饰符。
        if ((modifier & Modifier.PUBLIC) == Modifier.PUBLIC)
            System.out.println("\t 访问修饰符是：public");
        else
            System.out.println("\t 访问修饰符是：default(package)");
        if ((modifier & Modifier.FINAL) == Modifier.FINAL)
            System.out.println("\t 这个类是 final 的");
        if ((modifier & Modifier.ABSTRACT) == Modifier.ABSTRACT)
            System.out.println("\t 这是一个抽象类");
        if ((modifier & Modifier.INTERFACE) == Modifier.INTERFACE)
            System.out.println("\t 这是一个接口");
        System.out.println("-------------------------");
    }
}
